ROS 2
https://docs.ros.org/
Robot Operating System 2 第二代机器人操作系统
是一个用于机器人软件开发的开源框架。它提供了一套工具和库,使得开发者能够更容易地创建复杂的机器人应用程序。ROS的核心目标是实现代码的复用、模块化以及跨平台的机器人软件开发。
模块化、分布式
实际上是软件库和工具集,用于简化在各种机器人平台上创建复杂而强大的机器人行为的任务,即不重复造轮子。
ROS2 是在 ROS 的基础上设计开发的第二代机器人操作系统,可以帮助我们简化机器人开发任务,本质上是加速机器人落地的软件库和工具集。
一个面向机器人的中间件、库和工具的集合。它为机器人应用开发提供了一种灵活的框架,用于编写机器人软件。它能够帮助开发者更容易地构建复杂的机器人系统,使得软件的复用性更高,
ROS2 相关基础
ROS2 的安装
ROS2 Architecture
ROS2 Package
ROS2 Message
ROS2 Communication
Ros2 bag
ROS and mqtt 代码使用
概念 Concepts
Basic Concepts
ROS2 Nodes
ROS2 Topics
ROS2 Services
RCL
实际实践
创建工作区
编写节点 rclcpp 或 rclpy
编译构建 colcon build
运行节点 ros2 run
测试通信 ros2 topic echo / ros2 topic pub
相关工具
Robot Operating System 2
ROS 2 (Robot Operating System 2) 并不是一个传统意义上的操作系统(如 Windows 或 Linux),而是一个用于构建机器人应用的开源软件框架和中间件。它提供了一系列库、工具和约定,旨在简化创建复杂、鲁棒的机器人行为的难度。
设计目标:面向真实世界应用
ROS 2 是对其前身 ROS 1 的彻底重新设计,旨在解决 ROS 1 在真实世界商业和研究应用中遇到的局限。其核心设计目标包括:
- 支持多机器人系统: 提供开箱即用的、可靠的多机器人通信能力。
- 支持实时控制: 改善对实时系统(Real-time Systems)的支持,满足高性能机器人(如机械臂)的控制需求。
- 支持嵌入式平台: 能够轻松部署到资源受限的微控制器上。
- 支持生产环境: 提升稳定性和安全性,使其适用于商业产品而非仅仅是学术研究。
核心概念:计算图模型 (Computation Graph)
一个 ROS 2 系统由一系列松散耦合的、可独立运行的节点 (Nodes) 组成,这些节点通过一个通用的通信层进行交互,形成一个“计算图”。
1. 节点 (Nodes)
节点是 ROS 2 中的基本可执行单元。一个机器人系统通常由许多各司其职的节点组成。例如,一个节点负责从摄像头读取图像,另一个节点负责处理图像以检测障碍物,还有一个节点负责根据障碍物信息控制电机。
2. 通信机制
节点之间通过三种核心机制进行通信:
-
话题 (Topics)
- 模式: 发布/订阅 (Publish/Subscribe) 模式,是多对多的异步通信。
- 工作方式: 一个节点(发布者)将消息发布到一个特定的话题上(如
/camera/image
),其他任意数量的节点(订阅者)都可以订阅该话题以接收这些消息。 - 适用场景: 持续的数据流传输,如传感器数据、机器人状态等。这是最常用的通信方式。
-
服务 (Services)
- 模式: 请求/响应 (Request/Response) 模式,是一对一的同步通信。
- 工作方式: 一个节点(客户端)向另一个节点(服务器)发送一个请求,并等待服务器处理并返回一个响应。
- 适用场景: 需要远程过程调用(RPC)的场景,例如请求机器人执行一个特定的、耗时较短的计算或动作。
-
动作 (Actions)
- 模式: 带反馈的请求/响应模式,是一对一的异步通信。
- 工作方式: 客户端向服务器发送一个目标 (Goal),服务器在执行任务的过程中会周期性地发布反馈 (Feedback),并在任务完成后返回一个最终结果 (Result)。客户端可以随时取消任务。
- 适用场景: 需要执行耗时较长、且需要过程监控的任务,如“导航到某个位置”、“旋转机械臂 30 度”等。
3. 其他概念
- 参数 (Parameters): 每个节点都可以拥有可动态配置的参数,方便在不重新编译代码的情况下调整节点行为。
- 启动文件 (Launch Files): 使用 Python 编写的脚本,用于一次性地启动和配置一个包含多个节点的复杂系统。
与 ROS 1 的主要区别
特性 | ROS 1 | ROS 2 |
---|---|---|
底层通信 | TCPROS/UDPROS (自定义) | DDS (Data Distribution Service),一个工业级、标准化的实时中间件。 |
多机器人通信 | 需要复杂的手动网络配置 | 原生支持,可自动发现和通信。 |
实时性 | 支持不佳 | 设计核心,提供实时安全的 C++客户端库。 |
官方支持语言 | C++, Python | C++, Python (均为一等公民) |
安全性 | 基本没有 | 内置安全机制,支持加密、认证和访问控制。 |
核心生态系统
- Rviz2: 强大的 3D 可视化工具,用于显示传感器数据、机器人模型和各种调试信息。
- Gazebo: 功能齐全的 3D 物理仿真环境,用于在部署到真实机器人之前进行算法测试。
- MoveIt2: 应用最广泛的开源运动规划框架,用于机械臂的路径规划、运动学求解和碰撞检测。
- Nav2: 完整的机器人自主导航框架。